@Lemon
2年前 提问
1个回答
代码静态分析采用的技术有哪些
Simon
2年前
代码静态分析采用的技术有以下这些:
词法分析技术:从左至右一个字符一个字符地读入源程序,对构成源程序的字符流进行扫描,通过使用正则表达式匹配方法将源代码转换为等价的符号(Token)流,生成相关符号列表。
语法分析技术:判断源程序结构上是否正确,通过使用上下文无关语法将相关符号整理为语法树。
抽象语法树分析技术:将程序组织成树形结构,树中的相关结点代表了程序中的相关代码。
语义分析技术:对结构上正确的源程序进行上下文有关性质的审查。
控制流分析技术:生成有向控制流图,用结点表示基本代码块,结点间的有向边代表控制流路径,反向边表示可能存在的循环;还可生成函数调用关系图,表示函数间的嵌套关系。
数据流分析技术:对控制流图进行遍历,记录变量的初始化点和引用点,保存相关数据信息。通过静态模拟应用程序的执行路径,帮助用户找到运行时才能暴露的一些严重错误,如资源泄漏、空指针异常、SQL注入及其他的安全性漏洞等潜在的运行时错误。
污点分析技术:“污点”是指所有来自不可靠数据源的数据,如用户输入、网络等。基于数据流图判断源代码中哪些变量可能受到攻击,是验证程序输入、识别代码表达缺陷的关键。
程序切片技术:将一个程序中用户感兴趣的代码都抽取出来组成一个新的程序,这个新的程序就是源程序的切片,根据切片规则的不同,生成的切片也各不相同。